/**
 * 作用：分析webpack打包资源大小，并输出分析文件
 * 开发思路：
 * 1、在哪做？compiler.hooks.emit，它是在打包输出前触发，我们需要分析资源大小同时添加上分析后的md文件。
 */
class AnalyzeWebpackPlugin {
  constructor(options = {}) {
    this.$options = options
  }

  apply(compiler) {
    compiler.hooks.emit.tap('AnalyzeWebpackPlugin', (compilation) => {
      // md中表格语法
      let content = `| 资源名称 | 资源大小 |
| --- | --- |`
      // 遍历所有即将输出文件，得到其大小
      Object.entries(compilation.assets).forEach(([filename, file]) => {
        content += `\n| ${filename} | ${Math.ceil(file.size() / 1024)}kb |`
      })
      // 分析生成一个md文件
      compilation.assets['analyze.md'] = {
        source() {
          return content
        },
        size() {
          return content.length
        }
      }
    })
  }
}

module.exports = AnalyzeWebpackPlugin
